//: C25:SingletonPattern.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 1999
// Copyright notice in Copyright.txt
#include <iostream>
using namespace std;

class Singleton
{
    static Singleton s;
    int i;
    Singleton(int x) : i(x) { }
    void operator=(Singleton&);
    Singleton(const Singleton&);
public:
    static Singleton& getHandle() {
        return s;
    }
    int getValue() {
        return i;
    }
    void setValue(int x) {
        i = x;
    }
};

Singleton Singleton::s(47);

int main()
{
    Singleton& s = Singleton::getHandle();
    cout << s.getValue() << endl;
    Singleton& s2 = Singleton::getHandle();
    s2.setValue(9);
    cout << s.getValue() << endl;
} ///:~
